╬πδαΓδσφΦσ

╤σ≥σΓ√σ ∩≡ΦδεµσφΦ 
└Σ≡σ± IP
└Σ≡σ± URL
╩δα±± URL
╤εΩσ≥√
╧ε≥εΩεΓ√σ ±εΩσ≥√
╩δα±± Socket
─α≥απ≡α∞∞φ√σ ±εΩσ≥√
╤Γ τⁿ ± Web
└∩δσ≥ ShowChart
╧≡ΦδεµσφΦ  SocketServ Φ SocketClient
└∩δσ≥ Form

    └∩δσ≥ Form

    ═α ∩≡Φ∞σ≡σ α∩δσ≥α Form ∞√ ∩εΩαµσ∞, ΩαΩ ∩≡ΦδεµσφΦ  Java ∞επ≤≥ ΓταΦ∞εΣσΘ±≥ΓεΓα≥ⁿ ± ≡α±°Φ≡σφΦ ∞Φ ±σ≡Γσ≡α Web, ≥αΩΦ∞Φ ΩαΩ ∩≡επ≡α∞∞√ CGI ΦδΦ ∩≡ΦδεµσφΦ  ISAPI.

    ┬ εΩφσ φα°σπε α∩δσ≥α φα⌡εΣΦ≥±  ⌠ε≡∞α, ±εΣσ≡µα∙α  ΣΓα εΣφε±≥≡ε≈φ√⌡ ∩εδ  ≡σΣαΩ≥Φ≡εΓαφΦ , Ωφε∩Ω≤ Φ ∞φεπε±≥≡ε≈φεσ ∩εδσ ≡σΣαΩ≥Φ≡εΓαφΦ  (≡Φ±. 5).

    pic05.gif (4332 bytes)

    ╨Φ±. 5. ╬Ωφε α∩δσ≥α Form

    ▌≥α ⌠ε≡∞α ∩≡σΣφατφα≈σφα Σδ  ΣεßαΓδσφΦ  τα∩Φ±σΘ Γ ßατ≤ Σαφφ√⌡, ±εΣσ≡µα∙≤■ ²δσΩ≥≡εφφ√σ ∩ε≈≥εΓ√σ αΣ≡σ±α. ╟α∩εδφΦΓ ∩εδ  Φ∞σφΦ Φ αΣ≡σ±α E-Mail, ∩εδⁿτεΓα≥σδⁿ Σεδµσφ φαµα≥ⁿ Ωφε∩Ω≤ Send. ╧≡Φ ²≥ε∞ ΓΓσΣσφφα  Φφ⌠ε≡∞α÷Φ  ß≤Σσ≥ ∩σ≡σΣαφα ≡α±°Φ≡σφΦ■ ±σ≡Γσ≡α CGI, Ωε≥ε≡√Θ τα∩Φ°σ≥ σσ Γ ßατ≤ Σαφφ√⌡, α τα≥σ∞ ε≥∩≡αΓΦ≥ εß≡α≥φε α∩δσ≥≤. ╤ε⌡≡αφσφφ√σ τα∩Φ±Φ, ∩εδ≤≈σφφ√σ ε≥ ∩≡επ≡α∞∞√ CGI, α∩δσ≥ FORM ε≥εß≡ατΦ≥ Γ ∞φεπε±≥≡ε≈φε∞ ∩εδσ ≡σΣαΩ≥Φ≡εΓαφΦ , ΩαΩ ²≥ε ∩εΩαταφε φα ≡Φ±. 5.

    ╚±⌡εΣφ√σ ≥σΩ±≥√ α∩δσ≥α Form

    ╚±⌡εΣφ√σ ≥σΩ±≥√ α∩δσ≥α Form ∩≡σΣ±≥αΓδσφ√ Γ δΦ±≥Φφπσ 5.

    ╦Φ±≥Φφπ 5. ╘αΘδ Form.java

    import java.applet.*;
    import java.awt.*;
    import java.net.*;
    import java.io.*;
    import java.util.*;
    public class Form extends Applet
      implements Runnable
    {
      private Thread m_store = null;
      TextField txtName;
      TextField txtEMail;
      TextArea  txta;
      Button btnGetText;
      public void init()
      {
        Label lbName;
        Label lbEMail;
        Label lbPress;    
        lbName = new Label("Enter your name:");
        lbEMail = new Label(
          "Enter your E-Mail address:");    
        add(lbName);
        txtName = new TextField("Your name", 40);
        add(txtName);
        add(lbEMail);
        txtEMail = 
          new TextField("your@email", 40);
        add(txtEMail);
        btnGetText = new Button("Send!");
        add(btnGetText);
        txta = new TextArea(8, 65);
        add(txta);
        setBackground(Color.yellow);
      }
      public void paint(Graphics g)
      {
        setBackground(Color.yellow);	
        Dimension dimAppWndDimension = getSize();
        g.setColor(Color.black);
        g.drawRect(0, 0, 
          dimAppWndDimension.width  - 1, 
          dimAppWndDimension.height - 1);
      }
      public boolean action(Event evt, Object obj)
      {
        Button btn;
        if(evt.target instanceof Button)
        {
          btn = (Button)evt.target;
          if(evt.target.equals(btnGetText))
          {
            startTransaction();
          }
          else
            return false;
          return true;
        }
        return false;
      }
      void startTransaction()
      {
        m_store = new Thread(this);
        m_store.start();
      }  
      public void stop()
      {
        if (m_store != null)
        {
          m_store.stop();
          m_store = null;
        }
      }
      public void run()
      {
        URL u;
        URLConnection c;
        PrintStream ps;
        DataInputStream is;  
        try
        {
          String szSourceStr = 
            txtName.getText() + 
    	", " + txtEMail.getText();	
          String szReceived;
          String szURL = 
          "http://frolov/scripts/store.exe";
          u = new URL(szURL);
          c = u.openConnection();
          ps = new PrintStream(
            c.getOutputStream());
          ps.println(szSourceStr);
          ps.close();
          is = new DataInputStream(
            c.getInputStream());
          szReceived = is.readLine();
          is.close();
          txta.appendText(szReceived + "\r\n");
          repaint();
        }
        catch (Exception ioe)
        {
          showStatus(ioe.toString());
          stop();
        }
      }
    }

    ╚±⌡εΣφ√Θ ≥σΩ±≥ ΣεΩ≤∞σφ≥α HTML, Ωε≥ε≡√Θ ß√δ ∩εΣπε≥εΓδσφ Σδ  φα± ±Φ±≥σ∞εΘ Java Workshop, ∞√ φσ∞φεπε ε≥≡σΣαΩ≥Φ≡εΓαδΦ, Φτ∞σφΦΓ ∩α≡α∞σ≥≡ CODEBASE (δΦ±≥Φφπ 6).

    ╦Φ±≥Φφπ 6. ╘αΘδ Form.tmp.html

    <applet name="Form" 
      code="Form.class" 
      codebase="http://frolov/"
      width="500"
      height="200"
      align="Top"
      alt="If you had a java-enabled browser,
     you would see an applet here.">
       <hr>If your browser 
    recognized the applet tag, 
    you would see an applet here.<hr>
    </applet>

    ┬ ²≥ε∞ ∩α≡α∞σ≥≡σ ±δσΣ≤σ≥ ≤Ωατα≥ⁿ ∩≤≥ⁿ Ω Ωα≥αδεπ≤, Γ Ωε≥ε≡ε∞ ≡α±∩εδαπασ≥±  ßαΘ≥-ΩεΣ α∩δσ≥α.

    ╬∩Φ±αφΦσ Φ±⌡εΣφ√σ⌡ ≥σΩ±≥εΓ α∩δσ≥α Form

    ╧≡Φ ΦφΦ÷ΦαδΦτα÷ΦΦ ∞σ≥εΣ init ±ετΣασ≥ Γ±σ φσεß⌡εΣΦ∞√σ ε≡παφ√ ≤∩≡αΓδσφΦ  Φ ΣεßαΓδ σ≥ Φ⌡ Γ εΩφε α∩δσ≥α.

    ╩επΣα ∩εδⁿτεΓα≥σδⁿ τα∩εδφ σ≥ ⌠ε≡∞≤ Φ φαµΦ∞ασ≥ Ωφε∩Ω≤ Send, εß≡αßε≥≈ΦΩ ±εε≥Γσ≥±≥Γ≤■∙σπε ±εß√≥Φ  Γ√τ√Γασ≥ ∞σ≥εΣ startTransaction, τα∩≤±Ωα■∙ΦΘ ∩≡ε÷σ±± εß∞σφα Σαφφ√∞Φ ± ≡α±°Φ≡σφΦσ∞ ±σ≡Γσ≡α Web:

    if(evt.target.equals(btnGetText))
    {
      startTransaction();
    }

    ╠σ≥εΣ startTransaction, ε∩≡σΣσδσφφ√Θ Γ φα°σ∞ ∩≡ΦδεµσφΦΦ, ±ετΣασ≥ Φ τα∩≤±Ωασ≥ φα Γ√∩εδφσφΦσ ∩ε≥εΩ, Ωε≥ε≡√Θ Φ ß≤Σσ≥ ΓταΦ∞εΣσΘ±≥ΓεΓα≥ⁿ ± ∩≡επ≡α∞∞εΘ CGI:

    void startTransaction()
    {
      m_store = new Thread(this);
      m_store.start();
    }  

    ╧≡Φ ²≥ε∞ Γ Ωα≈σ±≥Γσ ε≥Σσδⁿφεπε ∩ε≥εΩα, ≡αßε≥α■∙σπε εΣφεΓ≡σ∞σφφε ± ΩεΣε∞ α∩δσ≥α, Γ√±≥≤∩ασ≥ ∞σ≥εΣ run. ╚∞σφφε Γ φσ∞ ±ε±≡σΣε≥ε≈σφα Γ±  δεπΦΩα εß∞σφα Σαφφ√∞Φ ± ±σ≡Γσ≡ε∞ Web.

    ╥αΩ ΩαΩ Γ ∩≡ε÷σ±±σ ΓταΦ∞εΣσΘ±≥ΓΦ  ∞επ≤≥ ΓετφΦΩα≥ⁿ ≡ατδΦ≈φ√σ Φ±Ωδ■≈σφΦ , ∞√ ∩≡σΣ≤±∞ε≥≡σδΦ Φ⌡ εß≡αßε≥Ω≤ ∩≡Φ ∩ε∞ε∙Φ ßδεΩα try-catch:

    URL u;
    URLConnection c;
    PrintStream ps;
    DataInputStream is;  
    try
    {
      . . .
    }
    catch (Exception ioe)
    {
      showStatus(ioe.toString());
      stop();
    }

    ═ατΓαφΦσ ΓετφΦΩ°σπε Φ±Ωδ■≈σφΦ  ß≤Σσ≥ ε≥εß≡αµσφε Γ ±≥≡εΩσ ±ε±≥ε φΦ  ß≡α≤τσ≡α.

    ╥σ∩σ≡ⁿ ε ≥ε∞, ≈≥ε Σσδασ≥ ∞σ≥εΣ run ∩ε±δσ ∩εδ≤≈σφΦ  ≤∩≡αΓδσφΦ .

    ╧σ≡Γ√∞ Σσδε∞ εφ ΦτΓδσΩασ≥ Φτ εΣφε±≥≡ε≈φ√⌡ ≥σΩ±≥εΓ√⌡ ∩εδσΘ Φ∞  Φ ²δσΩ≥≡εφφ√Θ αΣ≡σ±, εß·σΣΦφ   Φ⌡ Φ τα∩Φ±√Γα  ∩εδ≤≈σφφ≤■ ≥σΩ±≥εΓ≤■ ±≥≡εΩ≤ Γ ∩εδσ szSourceStr:

    String szSourceStr = 
       txtName.getText() + ", " +
       txtEMail.getText();

    ┬ ±≥≡εΩσ szURL φα⌡εΣΦ≥±  αΣ≡σ± URL ∩≡επ≡α∞∞√ CGI:

    String szURL = 
      "http://frolov/scripts/store.exe";

    ┬ ≡σαδⁿφε∞ ∩≡ΦδεµσφΦΦ ²≥ε≥ αΣ≡σ± φσεß⌡εΣΦ∞ε ∩σ≡σΣαΓα≥ⁿ α∩δσ≥≤ ≈σ≡στ ∩α≡α∞σ≥≡. ╠√ Φ±∩εδⁿτεΓαδΦ φσ∩ε±≡σΣ±≥Γσφφεσ ΩεΣΦ≡εΓαφΦσ ≥εδⁿΩε Σδ  ≤∩≡ε∙σφΦ  Φ±⌡εΣφεπε ≥σΩ±≥α.

    ═α ±δσΣ≤■∙σ∞ ²≥α∩σ ∞σ≥εΣ run ±ετΣασ≥ Σδ  ∩≡επ≡α∞∞√ CGI εß·σΩ≥ Ωδα±±α URL Φ ε≥Ω≡√Γασ≥ ± φΦ∞ ±εσΣΦφσφΦσ:

    u = new URL(szURL);
    c = u.openConnection();

    ╧εδⁿτ≤ ±ⁿ ²≥Φ∞ ±εσΣΦφσφΦσ∞, ∞σ≥εΣ run ±ετΣασ≥ ⌠ε≡∞α≥Φ≡εΓαφφ√Θ ∩ε≥εΩ Γ√ΓεΣα, τα∩Φ±√Γασ≥ Γ φσπε ±≥≡εΩ≤ Φ∞σφΦ Φ ²δσΩ≥≡εφφεπε αΣ≡σ±α, α τα≥σ∞ ταΩ≡√Γασ≥ ∩ε≥εΩ:

    ps = new PrintStream(c.getOutputStream());
    ps.println(szSourceStr);
    ps.close();

    ╧σ≡σΣαφφ√σ ≥αΩΦ∞ εß≡ατε∞ Σαφφ√σ ∩ε∩αΣ≤≥ Γ ±≥αφΣα≡≥φ√Θ ∩ε≥εΩ ΓΓεΣα ∩≡επ≡α∞∞√ CGI, ε≥Ω≤Σα εφα Φ⌡ Φ ∩≡ε≈Φ≥ασ≥.

    ╤ΣσδαΓ ²≥ε, ∩≡επ≡α∞∞α CGI τα∩Φ°σ≥ Γ ±≥αφΣα≡≥φ√Θ Γ√⌡εΣφεΘ ∩ε≥εΩ ±≥≡εΩ≤ ε≥Γσ≥α, Ωε≥ε≡≤■ φσεß⌡εΣΦ∞ε ∩≡ε≈Φ≥α≥ⁿ Γ ∞σ≥εΣσ run φα°σπε α∩δσ≥α. ─δ  ²≥επε ∞√ ε≥Ω≡√Γασ∞ Γ⌡εΣφεΘ ∩ε≥εΩ, ±ετΣασ∞ φα σπε ε±φεΓσ ⌠ε≡∞α≥Φ≡εΓαφφ√Θ Γ⌡εΣφεΘ ∩ε≥εΩ Σαφφ√⌡, ≈Φ≥ασ∞ εΣφ≤ ±≥≡εΩ≤ ≥σΩ±≥α Φ ταΩ≡√Γασ∞ Γ⌡εΣφεΘ ∩ε≥εΩ:

    is = new DataInputStream(c.getInputStream());
    String szReceived;
    szReceived = is.readLine();
    is.close();

    ╤≡ατ≤ ∩ε±δσ ²≥επε ∩≡επ≡α∞∞α CGI ταΓσ≡°Φ≥ ±Γε■ ≡αßε≥≤ Φ ß≤Σσ≥ πε≥εΓα Ω εß≡αßε≥Ωσ φεΓ√⌡ τα∩≡ε±εΓ φα ΣεßαΓδσφΦσ τα∩Φ±σΘ. ╫≥ε µσ Ωα±ασ≥±  ∞σ≥εΣα run, ≥ε εφ ΣεßαΓΦ≥ ∩εδ≤≈σφφ≤■ ε≥ ≡α±°Φ≡σφΦ  ±σ≡Γσ≡α ≥σΩ±≥εΓ≤■ ±≥≡εΩ≤ Γ ∞φεπε±≥≡ε≈φεσ εΩφε ≡σΣαΩ≥Φ≡εΓαφΦ , ΩαΩ ²≥ε ∩εΩαταφε φΦµσ, α τα≥σ∞ ΦφΦ÷ΦΦ≡≤σ≥ ∩σ≡σ≡Φ±εΓΩ≤ εΩφα α∩δσ≥α:

    txta.appendText(szReceived + "\r\n");
    repaint();

    ╟α∞σ≥Φ∞, ≈≥ε Φ±∩εδⁿτεΓαφφ√Θ φα∞Φ ±∩ε±εß ∩σ≡σΣα≈Φ Σαφφ√⌡ ∩εΣ⌡εΣΦ≥ ≥εδⁿΩε Σδ  δα≥Φφ±ΩΦ⌡ ±Φ∞ΓεδεΓ. ┼±δΦ Γα∞ φ≤µφε ∩σ≡σΣαΓα≥ⁿ ±Φ∞Γεδ√ ΩΦ≡ΦδδΦ÷√, ±δσΣ≤σ≥ ∩≡σεß≡ατεΓ√Γα≥ⁿ Φ⌡ Φτ ΩεΣΦ≡εΓΩΦ UNICODE, φα∩≡Φ∞σ≡, Γ πσΩ±αΣσ÷Φ∞αδⁿφ≤■ ΩεΣΦ≡εΓΩ≤, α Γ ∩≡επ≡α∞∞σ CGI Γ√∩εδφ ≥ⁿ εß≡α≥φεσ ∩≡σεß≡ατεΓαφΦσ. └φαδεπΦ≈φ≤■ ∞σ≥εΣΦΩ≤ ∞εµφε ∩≡Φ∞σφ ≥ⁿ Φ Σδ  ∩σ≡σΣα≈Φ ∩≡εΦτΓεδⁿφ√⌡ ΣΓεΦ≈φ√⌡ Σαφφ√⌡.

    ╚±⌡εΣφ√Θ ≥σΩ±≥ ∩≡επ≡α∞∞√ CGI store.exe

    ╚±⌡εΣφ√Θ ≥σΩ±≥ ∩≡επ≡α∞∞√ CGI store.exe ε≈σφⁿ ∩≡ε±≥ Φ ∩εΩαταφ Γ δΦ±≥Φφπσ 7.

    ╦Φ±≥Φφπ 7. ╘αΘδ store.c

    #include <windows.h>
    #include <tchar.h>
    #include <wchar.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void main(int argc, char *argv[])
    {
      int   nInDatasize;
      char  * szMethod;
      char  szBuf[2000];
      FILE *fDatabase;
      CRITICAL_SECTION csAddRecord;
      szMethod = getenv("REQUEST_METHOD");
      if(!strcmp(szMethod, "POST"));
      {
        nInDatasize = atoi(
          getenv("CONTENT_LENGTH"));
        fread(szBuf, nInDatasize, 1, stdin);
        szBuf[nInDatasize] = '\0';
        InitializeCriticalSection(&csAddRecord);
        EnterCriticalSection(&csAddRecord);
        fDatabase = 
          fopen("c:\\EMAIL.DAT", "a+");
        if(fDatabase != NULL)
        {
          fputs(szBuf, fDatabase);
          fclose(fDatabase);
        }
        LeaveCriticalSection(&csAddRecord);
        DeleteCriticalSection(&csAddRecord);
        printf(
          "Content-type: text/plain\r\n\r\n");
        printf("Stored information: %s", szBuf);
      }
    }

    ▌≥ε≥ ≥σΩ±≥ ∩εΣπε≥εΓδσφ Σδ  ≡αßε≥√ Γ ±≡σΣσ  Windows 95 ΦδΦ Windows NT, ≥αΩ ΩαΩ Σδ  ±Φφ⌡≡εφΦτα÷ΦΦ Σε±≥≤∩α Ω ⌠αΘδ≤ ∞√ Φ±∩εδⁿτεΓαδΦ ±∩σ÷Φ⌠Φ≈σ±ΩΦσ Σδ  ²≥Φ⌡ ε∩σ≡α÷Φεφφ√⌡ ±Φ±≥σ∞ ⌠≤φΩ÷ΦΦ ≡αßε≥√ ± Ω≡Φ≥Φ≈σ±ΩΦ∞Φ ±σΩ÷Φ ∞Φ.

    ╤Γε■ ≡αßε≥≤ ∩≡επ≡α∞∞α CGI φα≈Φφασ≥ ± αφαδΦτα ∩σ≡σ∞σφφεΘ ±≡σΣ√ REQUEST_METHOD. ╙ßσΣΦΓ°Φ±ⁿ, ≈≥ε ∩≡Φ τα∩≤±Ωσ ∩≡επ≡α∞∞√ σΘ ∩σ≡σΣαδΦ Σαφφ√σ ∞σ≥εΣε∞ POST, ∩≡επ≡α∞∞α ε∩≡σΣσδ σ≥ ≡ατ∞σ≡ ²≥Φ⌡ Σαφφ√⌡ Φ±⌡εΣ  Φτ ±εΣσ≡µΦ∞επε ∩σ≡σ∞σφφεΘ ±≡σΣ√ CONTENT_LENGTH.

    ─αδσσ ∩≡επ≡α∞∞α ±≈Φ≥√Γασ≥ ±εε≥Γσ≥±≥Γ≤■∙σσ ΩεδΦ≈σ±≥Γε ßαΘ≥ Σαφφ√⌡ Φτ ±≥αφΣα≡≥φεπε ∩ε≥εΩα ΓΓεΣα, τα∩Φ±√Γασ≥ Φ⌡ Γ ⌠αΘδ. ╟α≥σ∞, ∩ε±δσ ΣεßαΓδσφΦ  ταπεδεΓΩα "Stored information:", ∩≡επ≡α∞∞α CGI τα∩Φ±√Γασ≥ ∩εδ≤≈σφφ≤■ ±≥≡εΩ≤ Γ ±≥αφΣα≡≥φ√Θ Γ√⌡εΣφεΘ ∩ε≥εΩ, ∩σ≡σΣαΓα  σσ ≥αΩΦ∞ εß≡ατε∞ α∩δσ≥≤ Form.

    ╥αΩ ΩαΩ ∩≡Φ ≡σαδⁿφεΘ ≡αßε≥σ Γ ±σ≥Φ Internet Γα°≤ ∩≡επ≡α∞∞≤ CGI ∞επ≤≥ εΣφεΓ≡σ∞σφφε τα∩≤±≥Φ≥ⁿ φσ±ΩεδⁿΩε ∩εδⁿτεΓα≥σδσΘ, Σδ  ±Φφ⌡≡εφΦτα÷ΦΦ εßφεΓδσφΦ  ⌠αΘδα ßατ√ Σαφφ√⌡ ∞√ ∩≡Φ∞σφΦδΦ Ω≡Φ≥Φ≈σ±Ω≤■ ±σΩ÷Φ■. ┬ ≡στ≤δⁿ≥α≥σ ± ⌠αΘδε∞ ∞εµσ≥ ≡αßε≥α≥ⁿ Γ δ■ßεΘ ∞ε∞σφ≥ Γ≡σ∞σφΦ ≥εδⁿΩε εΣφα Ωε∩Φ  ∩≡επ≡α∞∞√ CGI.

    ┼∙σ εΣφε τα∞σ≈αφΦσ Ωα±ασ≥±  ∩≤≥Φ Ω ⌠αΘδ≤, Ωε≥ε≡√Θ Γ φα°σ∞ ±δ≤≈ασ ±ετΣασ≥±  Γ Ωε≡φσΓε∞ Ωα≥αδεπσ ΣΦ±Ωα C:. ╧≡Φ ≤±≥αφεΓΩσ ∩≡επ≡α∞∞√ CGI φα ±σ≡Γσ≡ Γα∞ φσεß⌡εΣΦ∞ε εßσ±∩σ≈Φ≥ⁿ Σε±≥≤∩ φα τα∩Φ±ⁿ Ω Ωα≥αδεπ≤, Γ Ωε≥ε≡ε∞ ≡α±∩εδαπασ≥±  ⌠αΘδ, Σδ  ≤Σαδσφφ√⌡ ∩εδⁿτεΓα≥σδσΘ. ╬ ≥ε∞, ΩαΩ ²≥ε ±Σσδα≥ⁿ, Γ√ ∞εµσ≥σ ≤τφα≥ⁿ Φτ ΣεΩ≤∞σφ≥α÷ΦΦ φα Γα° ±σ≡Γσ≡ Web.



Java | ╧≡εΣ≤Ω≥√ Φ ≡σ°σφΦ  | ╥σ⌡φεδεπΦΦ | ╤σ≡ΓΦ± Φ εß≤≈σφΦσ
╬ Ωε∞∩αφΦΦ | ╧α≡≥φσ≡√ | ═εΓε±≥Φ | ╧εΦ±Ω
Sun Microsystems Inc. Corporate Information Our partners News and Events Search on site Java Computing Products and Solutions Technologies and Researches Education and Service Content